#Makefile
# 目标文件
TARGET = klogger
VERSION=1.0.0
TARGET_FILENAME=lib$(TARGET).$(VERSION)

# flags
#CC=gcc
CXX=g++
CXXFLAGS = -Wall -fPIC -fpermissive
LDFLAGS = -shared # 生成动态库

#args
RELEASE = 0#控制release还是debug版本 0代表debug版本，1代表release版本
BITS= 64    #64位还是32位

#指定运行时查找库thostmduserapi_se的路径
RPATH=-Wl,-rpath=.

ifeq ($(BITS), 32)
    CXXFLAGS += -m32
    #输出路径
    OUT_DIR = output
    #安装路径
    INSTALL_INCLUDE_DIR = /usr/local/include/$(TARGET)
    INSTALL_LIB_DIR = /usr/local/lib64/kkk
    #需要用到的一些第三方库的路径
    #LIBS = -Wl,-Bstatic -lbbenh.1.0.0 -Wl,-Bdynamic
    #LIBS = -llog4cpp
    #LIB_PATH = -L/usr/local/lib/kkk
else
    CXXFLAGS += -m64
    #输出路径
    OUT_DIR = output/x64
    #安装路径
    INSTALL_INCLUDE_DIR = /usr/local/include/$(TARGET)
    INSTALL_LIB_DIR = /usr/local/lib64/kkk
    #需要用到的一些第三方库的路径
    #LIBS = -Wl,-Bstatic -lbbenh.1.0.0 -Wl,-Bdynamic
    #LIB_PATH = -L/usr/local/lib64/kkk

endif

#
# -O0:不做任何优化，这是默认的编译选项
# -O2:O2优化增加了编译时间的基础上，提高了生成代码的执行效率
# -O3:包含了O2所有的优化的基础上，增加了更多的优化
# -ggdb: 为GDB生成专用的更为丰富的调试信息，但是，此时不能用其它的调试器来进行调试了
# -DNDEBUG 定义NDEBUG宏定义
#
ifeq ($(RELEASE), 0)
    CXXFLAGS += -ggdb -O0 -gdwarf-2
else
    #release
    CXXFLAGS += -O3 -DNDEBUG
endif

# 用到的一些头文件的路径
#INCLUDES=-I./ctp.v6.3.19_P1

ifeq ($(BITS), 32)
    INCLUDES += -I./
else
    INCLUDES += -I./
endif
#输出文件
OUTPUT = $(OUT_DIR)/$(TARGET_FILENAME).so
STATIC_OUTPUT = $(OUT_DIR)/$(TARGET_FILENAME).a

SRC=$(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRC))
#OBJS__ = $(SRC:.cpp= .o) # 特别提醒：".c"前后都不能有空格，非常严格，稍不注意就会有问题，建议用上面的格式

.PHONY : all $(OUTPUT) $(STATIC_OUTPUT) $(OBJS)
all: $(OUTPUT) $(STATIC_OUTPUT)
	@echo "======== end"
	
$(OUTPUT):$(OBJS)
	@if [ ! -d $(OUT_DIR) ]; then mkdir -p $(OUT_DIR); fi; #创建一个目录
	$(CXX) $(CXXFLAGS) $(RAPTH) $(LDFLAGS) $(LIB_PATH) $(LIBS) $(OBJS) -o $(OUTPUT)
	@echo "编译结束"

$(STATIC_OUTPUT):$(OBJS)
	@if [ ! -d $(OUT_DIR) ]; then mkdir -p $(OUT_DIR); fi; #创建一个目录
	ar rc $(STATIC_OUTPUT) $(OBJS)
	@echo "静态库编译结束"

$(OBJS):%.o:%.c
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

test:
	@echo $(SRC)
	@echo $(OBJS__)

clean:
	@echo "清理生成的中间文件和目标文件"
	rm $(OBJS) $(OUT_DIR) -rf
	@echo "清理结束"

install:
	@echo "安装文件"
	@if [ ! -d $(INSTALL_INCLUDE_DIR) ]; then mkdir -p $(INSTALL_INCLUDE_DIR); fi; #创建一个目录
	@if [ ! -d $(INSTALL_LIB_DIR) ]; then mkdir -p $(INSTALL_LIB_DIR); fi; #创建一个目
	install bbh_logger.h $(INSTALL_INCLUDE_DIR)/bbh_logger.h
	install $(OUTPUT) $(INSTALL_LIB_DIR)
	install $(STATIC_OUTPUT) $(INSTALL_LIB_DIR)

#install -m 

.PHONY: all test clean install

